//#pragma once
#include"graphics.h"

WINDOW* g_win=NULL;
GRAPHICS_COLOR g_fore_color;
GRAPHICS_COLOR g_back_color;

int g_style=A_BOLD;

bool init_graphics(void)             //初始化窗体函数，返回true（初始化成功）false（初始化失败）
{
	setlocale(LC_ALL,"");			//设置本地化，输入的字符不会是乱码
	g_win=initscr();				//初始化一个窗体，返回一个指针
	if(NULL==g_win)
	{
		printf("call initscr() failed!\n");
		return false;
	}
	cbreak();				    	//除了DELE和CTRL，其他的键值都会被读取
	noecho();				     	//输入的字元不显示在终端上
	  
	g_back_color=GCWhite;			//设置背景色if(has_colors())				//判断当前的终端有没有显示颜色的能力
	{
		int i,j,k;
		start_color();		        //启动彩色机制
		for(i=0,k=0;i<GCCount;i++)
		{
			for(j=0;j<GCCount;j++)
				init_pair(++k,i,j); //初始化颜色，给每个颜色分配一个ID
		}
	}	
	curs_set(0);					//隐藏鼠标
	g_fore_color=GCRed;				//设置前景色
	g_back_color=GCWhite;			//设置背景色
	clear_screen(0,0,COLS,LINES);	//COLS，LINES是库函数中的宏
	mvaddstr(14, 60, CHESS);		//在坐标14，60显示字符串CHESS
	wrefresh(g_win);				//刷新窗口，显示窗口的最新变化
							        //改变屏幕内容时，后面一定要跟上这条语句
	return true;
}

void exit_graphics(void)			//退出函数
{
	endwin();					    //退出窗口
}

void clear_screen(int x,int y,int w,int h)//清屏函数，形参为：清屏的初始坐标x,y；结束坐标w,h
{
	int i,j;
	g_back_color = GCWhite;		    //设置背景色
	wattrset(g_win,CURRENT_ATTRIBUTE);	//更新前景色和背景色
	for(i=0;i<h;i++)
	{
		wmove(g_win,i+y,x);		    //移动光标,i+y纵坐标，x横坐标
		for(j=0;j<w;j++)
			waddch(g_win,' ');		//在光标当前的位子打入空格
	}
	wrefresh(g_win);				//刷新窗口，显示窗口的最新变化
}

int readkey(void)				    //键盘读取函数，返回输入的键值
{
	int n,flags;
	int ch = getc(stdin);
	if(27 == ch)
	{
		flags=fcntl(STDIN_FILENO,F_GETFL,0);		    //得到标准输入的标志
		fcntl(STDIN_FILENO,F_SETFL,flags|O_NONBLOCK);	//改变设置
		
		
		ch=getc(stdin);
		if(91==ch)
		{
			ch=getc(stdin);
			switch(ch)
			{
				case 'D':ch=KEYLEFT;
						break;
				case 'C':ch=KEYRIGHT;
						break;
				case 'B':ch=KEYDOWN;
						break;
				case 'A':ch=KEYUP;
						break;
				default:ch=0;
						break;
			}
		}
		else
			ch=27;
		fcntl(STDIN_FILENO,F_SETFL,flags);
	}
	return ch;
}